/*     */ package com.zimbra.qa.unittest;
/*     */ 
/*     */ import com.zimbra.common.util.Log;
/*     */ import com.zimbra.common.util.Log.Level;
/*     */ import com.zimbra.common.zmime.ZMimeMessage;
/*     */ import com.zimbra.cs.datasource.imap.ImapAppender;
/*     */ import com.zimbra.cs.mailclient.CommandFailedException;
/*     */ import com.zimbra.cs.mailclient.MailConfig.Security;
/*     */ import com.zimbra.cs.mailclient.MailException;
/*     */ import com.zimbra.cs.mailclient.imap.AppendResult;
/*     */ import com.zimbra.cs.mailclient.imap.Body;
/*     */ import com.zimbra.cs.mailclient.imap.BodyStructure;
/*     */ import com.zimbra.cs.mailclient.imap.CAtom;
/*     */ import com.zimbra.cs.mailclient.imap.Envelope;
/*     */ import com.zimbra.cs.mailclient.imap.Flags;
/*     */ import com.zimbra.cs.mailclient.imap.IDInfo;
/*     */ import com.zimbra.cs.mailclient.imap.ImapCapabilities;
/*     */ import com.zimbra.cs.mailclient.imap.ImapConfig;
/*     */ import com.zimbra.cs.mailclient.imap.ImapConnection;
/*     */ import com.zimbra.cs.mailclient.imap.ImapResponse;
/*     */ import com.zimbra.cs.mailclient.imap.ImapUtil;
/*     */ import com.zimbra.cs.mailclient.imap.ListData;
/*     */ import com.zimbra.cs.mailclient.imap.Literal;
/*     */ import com.zimbra.cs.mailclient.imap.MailboxInfo;
/*     */ import com.zimbra.cs.mailclient.imap.MessageData;
/*     */ import com.zimbra.cs.mailclient.imap.ResponseHandler;
/*     */ import com.zimbra.cs.mailclient.util.Ascii;
/*     */ import com.zimbra.cs.mailclient.util.SSLUtil;
/*     */ import com.zimbra.cs.util.JMSession;
/*     */ import java.io.BufferedReader;
/*     */ import java.io.ByteArrayOutputStream;
/*     */ import java.io.File;
/*     */ import java.io.FileOutputStream;
/*     */ import java.io.IOException;
/*     */ import java.io.InputStreamReader;
/*     */ import java.io.OutputStream;
/*     */ import java.io.OutputStreamWriter;
/*     */ import java.io.PrintStream;
/*     */ import java.io.Writer;
/*     */ import java.net.Socket;
/*     */ import java.util.Date;
/*     */ import java.util.List;
/*     */ import java.util.Random;
/*     */ import java.util.concurrent.atomic.AtomicLong;
/*     */ import javax.mail.MessagingException;
/*     */ import javax.mail.internet.MimeMessage;
/*     */ import javax.net.ssl.SSLContext;
/*     */ import org.apache.log4j.BasicConfigurator;
/*     */ import org.apache.log4j.Level;
/*     */ import org.apache.log4j.Logger;
/*     */ import org.junit.After;
/*     */ import org.junit.Assert;
/*     */ import org.junit.Test;
/*     */ import org.junit.runner.JUnitCore;
/*     */ import org.junit.runner.Request;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class TestImapClient
/*     */ {
/*     */   private ImapConfig config;
/*     */   private ImapConnection connection;
/*  84 */   private static final Logger LOG = Logger.getLogger(TestImapClient.class);
/*     */   
/*     */   private static final String HOST = "localhost";
/*     */   
/*     */   private static final int PORT = 7143;
/*     */   
/*     */   private static final int SSL_PORT = 7993;
/*     */   
/*     */   private static final String USER = "user1";
/*     */   
/*     */   private static final String PASS = "test123";
/*     */   
/*     */   private static final String MESSAGE = "Return-Path: dac@zimbra.com\r\nDate: Fri, 27 Feb 2004 15:24:43 -0800 (PST)\r\nFrom: dac <dac@zimbra.com>\r\nTo: bozo <bozo@foo.com>\r\n\r\nThis is a test message.\r\n";
/*     */   
/*     */ 
/*     */   static
/*     */   {
/* 101 */     BasicConfigurator.configure();
/* 102 */     Logger.getRootLogger().setLevel(Level.INFO);
/* 103 */     LOG.setLevel(Level.DEBUG);
/*     */   }
/*     */   
/*     */   @After
/*     */   public void tearDown() throws Exception {
/* 108 */     if (this.connection != null) {
/* 109 */       this.connection.close();
/*     */     }
/* 111 */     this.config = null;
/* 112 */     this.connection = null;
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testLogin() throws Exception {
/* 117 */     connect();
/* 118 */     this.connection.login("test123");
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testSSLLogin() throws Exception {
/* 123 */     connect(MailConfig.Security.SSL);
/* 124 */     this.connection.login("test123");
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testStartTls() throws Exception {
/* 129 */     connect(MailConfig.Security.TLS);
/* 130 */     this.connection.login("test123");
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testPlainAuth() throws Exception {
/*     */     try {
/* 136 */       connect();
/* 137 */       this.connection.authenticate("test123");
/*     */     } catch (Throwable e) {
/* 139 */       e.printStackTrace();
/*     */     }
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testBadAuth() throws Exception {
/* 145 */     connect();
/*     */     try {
/* 147 */       this.connection.authenticate("foobaz");
/*     */     } catch (CommandFailedException e) {
/* 149 */       return;
/*     */     }
/* 151 */     throw new Exception("Expected auth failure");
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testSelect() throws Exception {
/* 156 */     login();
/* 157 */     MailboxInfo mb = this.connection.getMailboxInfo();
/* 158 */     Assert.assertNotNull(mb);
/* 159 */     Assert.assertTrue(mb.isReadWrite());
/* 160 */     Assert.assertTrue(mb.getUidValidity() > 0L);
/* 161 */     Assert.assertTrue(mb.getUidNext() > 0L);
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testList() throws Exception {
/* 166 */     login();
/* 167 */     List<ListData> lds = this.connection.list("", "*");
/* 168 */     for (ListData ld : lds) {
/* 169 */       Assert.assertEquals(47L, ld.getDelimiter());
/* 170 */       Assert.assertNotNull(ld.getMailbox());
/* 171 */       Assert.assertTrue(ld.getFlags().size() > 0);
/*     */     }
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testIdle() throws Exception {
/* 177 */     login();
/* 178 */     Assert.assertFalse(this.connection.isIdling());
/* 179 */     final AtomicLong exists = new AtomicLong(-1L);
/*     */     
/* 181 */     this.connection.idle(new ResponseHandler()
/*     */     {
/*     */       public void handleResponse(ImapResponse res) {
/* 184 */         System.out.println("XXX res = " + res);
/* 185 */         if (res.getCCode() == CAtom.EXISTS) {
/* 186 */           synchronized (exists) {
/* 187 */             exists.set(res.getNumber());
/*     */           }
/*     */         }
/*     */       }
/* 191 */     });
/* 192 */     Assert.assertTrue(this.connection.isIdling());
/*     */     
/* 194 */     sendTestMessage();
/*     */     
/* 196 */     synchronized (exists) {
/* 197 */       while (exists.get() <= 0L) {
/* 198 */         exists.wait();
/*     */       }
/*     */     }
/*     */     
/* 202 */     this.connection.stopIdle();
/*     */     
/* 204 */     MailboxInfo mb = this.connection.getMailboxInfo();
/* 205 */     Assert.assertEquals(mb.getExists(), exists.get());
/*     */   }
/*     */   
/*     */   private void sendTestMessage() throws IOException {
/* 209 */     Socket sock = new Socket("localhost", 7025);
/* 210 */     Writer out = new OutputStreamWriter(sock.getOutputStream());
/* 211 */     BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
/* 212 */     smtpSend(in, out, "LHLO localhost");
/* 213 */     smtpSend(in, out, "MAIL FROM: <user1@localhost>");
/* 214 */     smtpSend(in, out, "RCPT TO: <user1>");
/* 215 */     smtpSend(in, out, "DATA");
/* 216 */     smtpSend(in, out, "Hello, world\r\n.\r\n");
/* 217 */     smtpSend(in, out, "QUIT");
/*     */   }
/*     */   
/*     */   private static void smtpSend(BufferedReader in, Writer out, String cmd) throws IOException {
/* 221 */     System.out.println("SMTP C: " + cmd);
/* 222 */     out.write(cmd);
/* 223 */     out.write("\r\n");
/* 224 */     out.flush();
/*     */     String line;
/* 226 */     while ((line = in.readLine()) != null) {
/* 227 */       System.out.println("SMTP S: " + line);
/* 228 */       if (line.matches("5.. .*")) {
/* 229 */         throw new IOException("SMTP command failed: " + line);
/*     */       }
/* 231 */       if (!line.matches("2..-.*")) {}
/*     */     }
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testAppend()
/*     */     throws Exception
/*     */   {
/* 239 */     login();
/* 240 */     MailboxInfo mb = this.connection.select("INBOX");
/* 241 */     long exists = mb.getExists();
/* 242 */     Date date = new Date(System.currentTimeMillis() / 1000L * 1000L);
/* 243 */     Flags flags = Flags.fromSpec("fs");
/* 244 */     AppendResult res = this.connection.append("INBOX", Flags.fromSpec("fs"), date, new Literal(Ascii.getBytes("Return-Path: dac@zimbra.com\r\nDate: Fri, 27 Feb 2004 15:24:43 -0800 (PST)\r\nFrom: dac <dac@zimbra.com>\r\nTo: bozo <bozo@foo.com>\r\n\r\nThis is a test message.\r\n")));
/*     */     
/* 246 */     Assert.assertNotNull(res);
/* 247 */     mb = this.connection.select("INBOX");
/* 248 */     Assert.assertEquals(1L, mb.getExists() - exists);
/* 249 */     MessageData md = this.connection.uidFetch(res.getUid(), "(FLAGS BODY.PEEK[] INTERNALDATE)");
/* 250 */     Assert.assertNotNull(md);
/* 251 */     Assert.assertEquals(date, md.getInternalDate());
/* 252 */     Assert.assertEquals(res.getUid(), md.getUid());
/* 253 */     Assert.assertEquals(flags, md.getFlags());
/* 254 */     Body[] parts = md.getBodySections();
/* 255 */     Assert.assertNotNull(parts);
/* 256 */     Assert.assertEquals(1L, parts.length);
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testDelete() throws Exception {
/* 261 */     login();
/* 262 */     MailboxInfo mb = this.connection.select("INBOX");
/* 263 */     long exists = mb.getExists();
/* 264 */     AppendResult res = this.connection.append("INBOX", Flags.fromSpec("fs"), new Date(System.currentTimeMillis()), new Literal(Ascii.getBytes("Return-Path: dac@zimbra.com\r\nDate: Fri, 27 Feb 2004 15:24:43 -0800 (PST)\r\nFrom: dac <dac@zimbra.com>\r\nTo: bozo <bozo@foo.com>\r\n\r\nThis is a test message.\r\n")));
/*     */     
/* 266 */     Assert.assertNotNull(res);
/* 267 */     mb = this.connection.select("INBOX");
/* 268 */     Assert.assertEquals(exists, mb.getExists() - 1L);
/* 269 */     this.connection.uidStore(String.valueOf(res.getUid()), "+FLAGS.SILENT", Flags.fromSpec("d"));
/* 270 */     mb = this.connection.select("INBOX");
/* 271 */     Assert.assertEquals(exists, mb.getExists() - 1L);
/* 272 */     this.connection.expunge();
/* 273 */     mb = this.connection.select("INBOX");
/* 274 */     Assert.assertEquals(exists, mb.getExists());
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testFetch() throws Exception {
/* 279 */     connect();
/* 280 */     login();
/* 281 */     MailboxInfo mb = this.connection.select("INBOX");
/* 282 */     final AtomicLong count = new AtomicLong(mb.getExists());
/* 283 */     this.connection.uidFetch("1:*", "(FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY BODY.PEEK[])", new ResponseHandler()
/*     */     {
/*     */       public void handleResponse(ImapResponse res) throws Exception {
/* 286 */         if (res.getCCode() != CAtom.FETCH) return;
/* 287 */         MessageData md = (MessageData)res.getData();
/* 288 */         Assert.assertNotNull(md);
/* 289 */         Envelope env = md.getEnvelope();
/* 290 */         Assert.assertNotNull(env);
/* 291 */         Assert.assertNotNull(env.getSubject());
/* 292 */         Assert.assertNotNull(Long.valueOf(md.getUid()));
/* 293 */         Assert.assertTrue(md.getRfc822Size() != -1L);
/* 294 */         Assert.assertNotNull(md.getInternalDate());
/* 295 */         BodyStructure bs = md.getBodyStructure();
/* 296 */         Assert.assertNotNull(bs);
/* 297 */         if (bs.isMultipart()) {
/* 298 */           BodyStructure[] parts = bs.getParts();
/* 299 */           for (BodyStructure part : parts) {
/* 300 */             Assert.assertNotNull(part.getType());
/* 301 */             Assert.assertNotNull(part.getSubtype());
/*     */           }
/*     */         } else {
/* 304 */           Assert.assertNotNull(bs.getType());
/* 305 */           Assert.assertNotNull(bs.getSubtype());
/*     */         }
/* 307 */         Body[] body = md.getBodySections();
/* 308 */         Assert.assertNotNull(body);
/* 309 */         Assert.assertEquals(1L, body.length);
/*     */         
/* 311 */         count.decrementAndGet();
/* 312 */         System.out.printf("Fetched uid = %s\n", new Object[] { Long.valueOf(md.getUid()) });
/*     */       }
/* 314 */     });
/* 315 */     Assert.assertEquals(0L, count.longValue());
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testID() throws Exception {
/* 320 */     IDInfo id = new IDInfo();
/* 321 */     id.put("name", "foo");
/* 322 */     Assert.assertEquals("foo", id.get("name"));
/* 323 */     Assert.assertEquals("foo", id.get("Name"));
/* 324 */     connect();
/* 325 */     IDInfo id1 = this.connection.id(id);
/* 326 */     Assert.assertNotNull(id1);
/* 327 */     Assert.assertEquals("Zimbra", id1.get("name"));
/* 328 */     IDInfo id2 = this.connection.id(new IDInfo());
/* 329 */     Assert.assertEquals(id1, id2);
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testYahoo() throws Exception {
/* 334 */     ImapConfig config = new ImapConfig();
/* 335 */     config.getLogger().setLevel(Log.Level.trace);
/* 336 */     config.setHost("imap.mail.yahoo.com");
/* 337 */     config.setAuthenticationId("dacztest");
/* 338 */     this.connection = new ImapConnection(config);
/* 339 */     this.connection.connect();
/* 340 */     IDInfo id = new IDInfo();
/* 341 */     id.put("guid", "unknown");
/* 342 */     this.connection.id(id);
/* 343 */     this.connection.login("test1234");
/* 344 */     char delim = this.connection.getDelimiter();
/* 345 */     Assert.assertEquals(0L, delim);
/* 346 */     createTestMailbox("Large", 10000);
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testGMailAppend() throws Exception {
/* 351 */     ImapConfig config = new ImapConfig();
/* 352 */     config.getLogger().setLevel(Log.Level.trace);
/* 353 */     config.setHost("imap.gmail.com");
/* 354 */     config.setSecurity(MailConfig.Security.SSL);
/* 355 */     config.setSSLSocketFactory(SSLUtil.getDummySSLContext().getSocketFactory());
/* 356 */     config.setAuthenticationId("dacztest");
/* 357 */     config.setMaxLiteralTraceSize(999999);
/* 358 */     this.connection = new ImapConnection(config);
/* 359 */     this.connection.connect();
/* 360 */     this.connection.login("test1234");
/* 361 */     MimeMessage mm = newTestMessage(new Random().nextInt());
/*     */     
/* 363 */     ImapAppender appender = new ImapAppender(this.connection, "INBOX");
/* 364 */     long uid1 = appender.appendMessage(getBytes(mm), null);
/* 365 */     System.out.println("XXX uid1 = " + uid1);
/* 366 */     Assert.assertTrue("uid1 not found", uid1 > 0L);
/*     */     
/* 368 */     long uid2 = appender.appendMessage(getBytes(mm), null);
/* 369 */     Assert.assertTrue("uid2 not found", uid2 > 0L);
/* 370 */     Assert.assertEquals(uid1, uid2);
/* 371 */     this.connection.close();
/*     */   }
/*     */   
/*     */   @Test
/*     */   public void testParseUidSet() {
/* 376 */     long[] seq = { 1L, 2L, 3L, 4L, 5L };
/* 377 */     Assert.assertArrayEquals(seq, ImapUtil.parseUidSet("1,2,3,4,5"));
/* 378 */     Assert.assertArrayEquals(seq, ImapUtil.parseUidSet("1,2:4,5"));
/* 379 */     Assert.assertArrayEquals(seq, ImapUtil.parseUidSet("4:1,5"));
/*     */     try {
/* 381 */       ImapUtil.parseUidSet("4::1,4");
/* 382 */       Assert.fail();
/*     */     } catch (IllegalArgumentException e) {}
/*     */     try {
/* 385 */       ImapUtil.parseUidSet("");
/* 386 */       Assert.fail();
/*     */     } catch (IllegalArgumentException e) {}
/*     */     try {
/* 389 */       ImapUtil.parseUidSet("1,,2");
/* 390 */       Assert.fail();
/*     */     } catch (IllegalArgumentException e) {}
/*     */   }
/*     */   
/*     */   private byte[] getBytes(MimeMessage mm) throws MessagingException, IOException {
/* 395 */     ByteArrayOutputStream baos = new ByteArrayOutputStream();
/* 396 */     mm.writeTo(baos);
/* 397 */     return baos.toByteArray();
/*     */   }
/*     */   
/*     */   private void createTestMailbox(String name, int count) throws IOException, MessagingException
/*     */   {
/* 402 */     if (!this.connection.exists(name)) {
/* 403 */       this.connection.create(name);
/*     */     }
/* 405 */     MailboxInfo mb = this.connection.select(name);
/* 406 */     for (int i = (int)mb.getExists(); i < count; i++) {
/* 407 */       MimeMessage mm = newTestMessage(i);
/* 408 */       long uid = uidAppend(mm, null, null);
/* 409 */       LOG.debug("Appended test message " + i + ", uid = " + uid);
/*     */     }
/*     */   }
/*     */   
/*     */   private static MimeMessage newTestMessage(int num) throws MessagingException {
/* 414 */     MimeMessage mm = new ZMimeMessage(JMSession.getSession());
/* 415 */     mm.setHeader("Message-Id", "<test-" + num + "@foo.com>");
/* 416 */     mm.setHeader("To", "nobody@foo.com");
/* 417 */     mm.setHeader("From", "nobody@bar.com");
/* 418 */     mm.setSubject("Test message " + num);
/* 419 */     mm.setSentDate(new Date(System.currentTimeMillis()));
/* 420 */     mm.setContent("This is test message " + num, "text/plain");
/* 421 */     return mm;
/*     */   }
/*     */   
/*     */   private long uidAppend(MimeMessage msg, Flags flags, Date date) throws IOException
/*     */   {
/* 426 */     String name = this.connection.getMailboxInfo().getName();
/* 427 */     File tmp = null;
/* 428 */     OutputStream os = null;
/*     */     try {
/* 430 */       File dir = this.connection.getImapConfig().getLiteralDataDir();
/* 431 */       tmp = File.createTempFile("lit", null, dir);
/* 432 */       os = new FileOutputStream(tmp);
/* 433 */       msg.writeTo(os);
/* 434 */       os.close();
/* 435 */       AppendResult res = this.connection.append(name, flags, date, new Literal(tmp));
/* 436 */       return res != null ? res.getUid() : -1L;
/*     */     } catch (MessagingException e) {
/* 438 */       throw new MailException("Error appending message", e);
/*     */     } finally {
/* 440 */       if (os != null) os.close();
/* 441 */       if (tmp != null) { tmp.delete();
/*     */       }
/*     */     }
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   private void login()
/*     */     throws IOException
/*     */   {
/* 510 */     connect();
/* 511 */     this.connection.login("test123");
/* 512 */     this.connection.select("INBOX");
/* 513 */     Assert.assertTrue(this.connection.getMailboxInfo().getName().equals("INBOX"));
/* 514 */     ImapCapabilities cap = this.connection.getCapabilities();
/* 515 */     Assert.assertNotNull(cap);
/* 516 */     Assert.assertTrue(cap.hasCapability("UIDPLUS"));
/* 517 */     Assert.assertTrue(cap.hasCapability("UNSELECT"));
/*     */   }
/*     */   
/*     */   private void connect() throws IOException {
/* 521 */     connect(null);
/*     */   }
/*     */   
/*     */   private void connect(MailConfig.Security security) throws IOException {
/* 525 */     if (this.config == null) {
/* 526 */       this.config = getConfig(security);
/*     */     }
/* 528 */     System.out.println("---------");
/* 529 */     this.connection = new ImapConnection(this.config);
/* 530 */     this.connection.connect();
/*     */   }
/*     */   
/*     */   private static ImapConfig getConfig(MailConfig.Security security) {
/* 534 */     ImapConfig config = new ImapConfig("localhost");
/* 535 */     config.setPort(7143);
/* 536 */     if (security != null) {
/* 537 */       config.setSecurity(security);
/* 538 */       if (security == MailConfig.Security.SSL) {
/* 539 */         config.setPort(7993);
/* 540 */         config.setSSLSocketFactory(SSLUtil.getDummySSLContext().getSocketFactory());
/*     */       }
/*     */     }
/* 543 */     config.getLogger().setLevel(Log.Level.trace);
/* 544 */     config.setMechanism("PLAIN");
/* 545 */     config.setAuthenticationId("user1");
/*     */     
/* 547 */     return config;
/*     */   }
/*     */   
/*     */   public static void main(String... args) throws Exception {
/* 551 */     JUnitCore junit = new JUnitCore();
/* 552 */     if (args.length > 0) {
/* 553 */       for (String test : args) {
/* 554 */         String method = String.format("test%C%s", new Object[] { Character.valueOf(test.charAt(0)), test.substring(1) });
/* 555 */         junit.run(Request.method(TestImap.class, method));
/*     */       }
/*     */     } else {
/* 558 */       junit.run(new Class[] { TestImap.class });
/*     */     }
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/qa/unittest/TestImapClient.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */